/**
 * 问题表
 */
var mongoose = require('mongoose');
var constant = require('../../config/constant');
var questionStatus = constant.QuestionStatus;
var replyStatus = constant.ReplyStatus;
var reportStatus = constant.ReportStatus;
var BaseSchema = require('./base_schema');
var format = require('date-format');

var questionSchema = new BaseSchema({
    askerId: {type: String},                                           // 发问者ID
    answererId: {type: String},                                        // 回答者ID
    status: {type: Number, default: questionStatus.UNANSWERED},       // 状态(-1: 已删除; 0: 待解决; 10: 已抢答; 20: 已解决)
    evaluation: {type: Number},                                        // 用户评价(0: 不满意; 1: 满意; 2: 非常满意)
    replyStatus: {type: Number, default: replyStatus.NOT_REPLY},      // 回复状态(0: 未回复; 1: 有回复; 2: 已解决)
    describe: {type: String},                                          // 问题文字描述
    images: {type: [String]},                                          // 问题中所包含的图片URL数组
    randomNum: {type: Number, default: Math.random},                  // 问题对应的随机数, 便于随机获取问题
    tags: {type: [String]},                                            // 问题标签
    type: {type: Number, default: 1},                                 // 数据类型(0: 假的; 1: 真实的)
    isAssigned: {type: Number},                                        // 是否为指定医生提问(0: 否; 1: 是)
    assignTime: {type: Number},                                        // 向指定医生提问的时间或者抢答的时间(毫秒)
    firstReplyTime: {type: Number},                                    // 医生第一次回复用户的时间(毫秒)
    pregnantDayNum: {type: Number},                                    // 怀孕天数(-1: 非孕周范围; 1~280: 有效)
    answeredAt: {type: Date},                                          // 问题的结束时间
    classification: {type: mongoose.Schema.ObjectId},                  // 问题类别ID
    lastInterlocutionAt: {type: Date},                                 // 最后的对话时间
    lastInterlocutorIdentity: {type: Number},                          // 最后的对话人身份(0: 系统账户/医生; 10: 用户)
    reporterId: {type: String},                                        // 举报人ID
    reportContent: {type: String},                                     // 举报内容
    reportedAt: {type: Date},                                          // 举报时间
    reportStatus: {type: Number, default: reportStatus.NOT_REPORTED}, // 举报状态(0: 未举报; 1: 已被举报的; 2: 举报无效)
    orderNum: {type: String},                                          // 对应的订单流水号
    orderStatus: {type: Number},                                       // 对应的订单状态
    payType: {type: Number},                                           // 付费类型(计次; 义诊; 包月; 抢答)
    cost: {type: Number},                                              // 费用(当付费类型为计次的和抢答的时需要保存)
    orderId: {type: String}                                            // 排序ID(针对医生端我的问题列表)
});

//
questionSchema.virtual('unansweredOrderId').get(function () {
    return format('yyyyMMddhhmmss', this.updatedAt) + this._id.toString();
});
questionSchema.virtual('reportTime').get(function () {
    return format('yyyy-MM-dd hh:mm:ss', this.reportedAt);
});
module.exports = mongoose.model('question', questionSchema);

